﻿#define _CRT_SECURE_NO_WARNINGS
//#include <iostream>
//using namespace std;
//
//int times_of_2(int n)
//{
//	int times = 0;
//	for (; n; n /= 10)
//	{
//		times += (n % 10 == 2);
//	}
//	return times;
//}
//
//int main()
//{
//	int l = 0, r = 0;
//	cin >> l >> r;
//	int times = 0;
//	for (; l <= r; l++)
//	{
//		times += times_of_2(l);
//	}
//	cout << times;
//}

//#include <cstdio>
//class Solution
//{
//public:
//	/**
//	 * 代码中的类名、方法名、参数名已经指定，请勿修改，直接返回方法规定的值即可
//	 *
//	 *
//	 * @param nums1 int整型vector
//	 * @param nums2 int整型vector
//	 * @return int整型vector
//	 */
//	bool find(vector<int>& v, int num)
//	{
//		for (auto e : v)
//		{
//			if (e == num)
//			{
//				return true;
//			}
//		}
//		return false;
//	}
//
//	vector<int> intersection(vector<int>& nums1, vector<int>& nums2)
//	{
//		static vector<int> ret;
//		for (auto e : nums1)
//		{
//			if (find(nums2, e) && !find(ret, e))
//			{
//				ret.push_back(e);
//			}
//		}
//		return ret;
//	}
//};

//#include <iostream>
//#include <string>
//#include <vector>
//using namespace std;

//string test()
//{
//	string ret;
//	//for (int i = 0; i < 150000; i++)
//	//{ 
//	//	ret += ('a' + i % 26);
//	//}
//	//for (int i = 149999; i >= 0; i--)
//	//{
//	//	ret += ('a' + i % 26);
//	//}
//	for (int i = 0; i < 75000; i++)
//	{
//		ret += "abba";
//	}
//	return ret;
//}
//
//void test2(string str)
//{
//	for (auto it = str.begin(); it != str.end(); it++)
//	{
//		if (it + 1 != str.end() && *it == *(it + 1))
//		{
//			cout << "no" << endl;
//			return;
//		}
//	}
//	cout << "yes" << endl;
//}
//
//class Data
//{
//public:
//	string::iterator _it1;
//	string::iterator _it2;
//};
//
//void solution(string& str)
//{
//	vector<Data> v;
//	auto it2 = str.begin();
//	auto old1 = str.begin();
//	auto old2 = str.begin();
//	for (auto it1 = str.begin(); it1 != str.end();)
//	{
//		if (it1 != str.end() && it1 + 1 != str.end() && *it1 == *(it1 + 1))
//		{
//			it2 = it1 + 1;
//			for (; it1 != str.begin() && (old2 == str.begin() ? true : it1 > old2 + 1) && *it1 == *it2; it1--, it2++);
//			if (*it1 != *it2)
//			{
//				it1++, it2--;
//			}
//			if(old2 == str.begin())
//			v.push_back({ old2,it1 });
//			else
//			v.push_back({ old2 + 1,it1 });
//			old2 = it2;
//			it1 = it2 + 1;
//		}
//		else if (it1 + 1 == str.end())
//		{
//			v.push_back({ it1,it1 + 1 });
//			it1++;
//		}
//		else
//		{
//			it1++;
//		}
//	}
//	string result;
//	for (auto e : v)
//	{
//		result.insert(result.end(), e._it1, e._it2);
//	}
//	if (result.size()) cout << result << endl;
//	else cout << 0 << endl;
//}
//
//int main()
//{
//	string str;
//	//cin >> str;
//	str = test();
//
//	test2(str);
//	int clock1 = clock();
//	solution(str);
//	int clock2 = clock();
//	test2(str);
//
//	cout << clock2 - clock1 << "ms" << endl;
//	return 0;
//}

//#include <iostream>
//#include <string>
//using namespace std;
//
//int main()
//{
//	string str;
//	cin >> str;
//
//	for (auto it = str.begin(); it != str.end();)
//	{
//		bool changed = false;
//		if (it != str.end() && it + 1 != str.end() && *it == *(it + 1))
//		{
//			it = str.erase(it, it + 2);
//			if (it != str.begin())
//			{
//				it--;
//			}
//			changed = true;
//		}
//		if (!changed && it != str.end()) it++;
//	}
//	if (str.size()) cout << str;
//	else cout << 0;
//
//	return 0;
//}

//#include <iostream>
//#include <string>
//#include <vector>
//using namespace std;
//
//class Data
//{
//public:
//	string::iterator _it1;
//	string::iterator _it2;
//};
//
//
//void solution(string& str)
//{
//	vector<Data> v;
//	auto it2 = str.begin();
//	auto old1 = str.begin();
//	auto old2 = str.begin();
//	bool changed = false;
//	for (auto it1 = str.begin(); it1 != str.end();)
//	{
//		if (it1 != str.end() && it1 + 1 != str.end() && *it1 == *(it1 + 1))
//		{
//			it2 = it1 + 1;
//			for (; it1 != str.begin() && (old2 == str.begin() ? true : it1 > old2 + 1) && *it1 == *it2; it1--, it2++);
//			if (*it1 != *it2)
//			{
//				it1++, it2--;
//			}
//			if (old2 == str.begin())
//				v.push_back({ old2,it1 });
//			else
//				v.push_back({ old2 + 1,it1 });
//			old2 = it2;
//			it1 = it2 + 1;
//			changed = true;
//		}
//		else if (it1 + 1 == str.end())
//		{
//			v.push_back({ old2 + 1,it1 + 1 });
//			it1++;
//		}
//		else
//		{
//			it1++;
//		}
//	}
//	string result;
//	if (changed)
//	{
//		for (auto e : v)
//		{
//			result.insert(result.end(), e._it1, e._it2);
//		}
//	}
//	else
//	{
//		result = str;
//	}
//	if (result.size()) cout << result << endl;
//	else cout << 0 << endl;
//}
//
//int main()
//{
//	string str;
//	cin >> str;
//	solution(str);
//
//	return 0;
//}

//class A
//{
//public:
//	int _pubA;
//protected:
//	int _proA;
//private:
//	int _priA;
//};
//class A_public : public A
//{
//	int fun() { _pubA++; }
//	int fun() { _proA++; }
//	//int fun() { _priA++; }
//};
//class A_protected : protected A
//{
//	int fun() { _pubA++; }
//	int fun() { _proA++; }
//	//int fun() { _priA++; }
//};
//class A_private : private A
//{
//	int fun() { _pubA++; }
//	int fun() { _proA++; }
//	//int fun() { _priA++; }
//};
//
//void test1()
//{
//	A_public a1;
//	a1._pubA;
//	//a1._proA;
//	//a1._priA;
//	A_protected a2;
//	//a2._pubA;
//	//a2._proA;
//	//a2._priA;
//	A_private a3;
//	//a3._pubA;
//	//a3._proA;
//	//a3._priA;
//}

//#include <String>
//using namespace std;
//
//class person
//{
//protected:
//    string _name;
//    size_t _id;
//    int _sex;
//    string _tel;
//};
//class teacher : public person
//{
//private:
//    void teach() { /*...*/ }
//};
//class student : public person
//{
//private:
//    void study() { /*...*/ }
//};
//
//int main()
//{
//
//
//	return 0;
//}

#include <vector>
using namespace std;

template<class T>
class stack : public std::vector<T>
{
public:
	void push(const T& x)
	{
		// 基类是类模板时, 需要指定⼀下类域，
		// 否则编译报错 : error C3861 : "push_back":找不到标识符
		// 因为 stack<int> 实例化时, 也实例化了 vector<int>
		// 但是模版是按需实例化, push_back 等成员函数未实例化, 所以找不到
		vector<T>::push_back(x);
		//push_back(x);
	}
	void pop()
	{
		vector<T>::pop_back();
	}
	const T& top()
	{
		return vector<T>::back();
	}
	bool empty()
	{
		return vector<T>::empty();
	}
};
class A
{
public:
	int fun() { /*...*/ }
	int _val;
};
class B : public A
{
public:
	int fun() { /*...*/ }
	int _val;
	void fun2()
	{
		fun();// 这样调用的是 B::fun()
		A::fun();// 必须显式指定才能调用 A 中的 fun()
		// 对于成员变量也是同理:
		_val = 1;
		A::_val = 1;
	}
};
